package cn.zqy.demo2.day09.Reader;

import java.io.FileReader;
import java.io.IOException;

/**
 *    java.io.Reader:【符输入流】,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类
 *     共性的成员方法:
 *         int read() 读取单个字符并返回。
 *         int read(char[] cbuf)一次读取多个字符,将字符读入数组。
 *         void close() 关闭该流并释放与之关联的所有资源。
 *
 *     java.io.FileReader extends InputStreamReader extends Reader
 *     FileReader:文件字符输入流
 *     作用:把硬盘文件中的数据以字符的方式读取到内存中
 *
 *     构造方法:
 *         FileReader(String fileName)
 *         FileReader(File file)
 *         参数:读取文件的数据源
 *             String fileName:文件的路径
 *             File file:一个文件
 *         FileReader构造方法的作用:
 *             1.创建一个FileReader对象
 *             2.会把FileReader对象指向要读取的文件
 *     字符输入流的使用步骤:
 *         1.创建FileReader对象,构造方法中绑定要读取的数据源
 *         2.使用FileReader对象中的方法read读取文件
 *         3.释放资源
 * */
public class Demo02FileReader {
    public static void main(String[] args) throws IOException {
        //1.创建FileReader对象,构造方法中绑定要读取的数据源
        FileReader fr = new FileReader("src\\cn\\zqy\\demo2\\day09\\reader\\b.txt");

        //2.使用FileReader对象中的方法read读取文件
        int len = 0;  //记录的是每次读取的有效字符个数
        char[] chars = new char[100];  // 存储读取到的多个字符
        while ((len = fr.read(chars)) != -1) {
            System.out.println(chars);  // 你好ABC#@
            System.out.println(new String(chars, 0, len)); // 你好ABC#@
            System.out.println(len);  // 7
        }

        //3.释放资源
        fr.close();

        // 注意： char类型的数组
        /*这两次调用的println方法是不同的，第一次调用的方法的参数是char[]数组类型,
        第二次调用的方法的参数是String类型的，因为“ss”+c把数组转化成了字符串String类型的了,
        这是println方法的重载问题导致的。*/
        char[] c = new char[]{'a', 'b', 'v'};
        byte[] b = new byte[]{1,2,3,4,5};
        System.out.println(b);  // 地址值
        System.out.println(c);  // abv
        System.out.println(c+"ss"); // 地址值ss
    }
}
